﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Insifo.BE.Gen;
using Insifo.DL.Gen;
using Insifo.DL;

namespace Insifo.BL.Gen
{
    public class BLUnidadMedida
    {
        DLTransactionMng _transaccion = null;

        DLUnidadMedida  _dl = new DLUnidadMedida();
        DLUnidadMedidaAplicacion _dlApl = new DLUnidadMedidaAplicacion();

        public DataSet Listar(BEUnidadMedida pbe)
        {
            return _dl.Listar(pbe);
        }


        public DataSet ListarAplicacion(BEUnidadMedida pbe)
        {
            return _dlApl.Listar(pbe);
        }

        public DataSet ListarPorAplicacion(BEUnidadMedidaAplicacion pbe)
        {
            return _dl.ListarPorAplicacion(pbe);
        }


        public BEUnidadMedida Obtener(BEUnidadMedida pbe)
        {
            return _dl.Obtener(pbe);
        }

        public BEUnidadMedida Insertar(BEUnidadMedida pbe)
        {
            BEUnidadMedida be = null;
            _transaccion = DLTransactionMng.Begin();
            try
            {
                _dl.Transaction = _transaccion;
                _dlApl.Transaction = _transaccion;

                be = _dl.Insertar(pbe);

                foreach (BEUnidadMedidaAplicacion beUnidadMedidaAplicacion in pbe.Aplicaciones)
                {
                    beUnidadMedidaAplicacion.IdUnidadMedida = be.IdUnidadMedida;
                    _dlApl.Insertar(beUnidadMedidaAplicacion);
                }
                _transaccion.Commit();
            }
            catch (Exception e)
            {
                //Cancela la transaccion
                _transaccion.RollBack();
                throw e;
            }
            finally
            {
                _transaccion.Dispose();
            }
            return be;
        }

        public BEUnidadMedida Actualizar(BEUnidadMedida pbe)
        {
            BEUnidadMedida be = null;
            _transaccion = DLTransactionMng.Begin();
            try
            {
                _dl.Transaction = _transaccion;
                _dlApl.Transaction = _transaccion;

                be = _dl.Actualizar(pbe);

                foreach (BEUnidadMedidaAplicacion beUnidadMedidaAplicacion in pbe.Aplicaciones)
                {
                    beUnidadMedidaAplicacion.IdUnidadMedida = be.IdUnidadMedida;
                    _dlApl.Insertar(beUnidadMedidaAplicacion);
                }
                //Culmina la transaccion
                _transaccion.Commit();
            }
            catch (Exception e)
            {
                //Cancela la transaccion
                _transaccion.RollBack();
                throw e;
            }
            finally
            {
                _transaccion.Dispose();
            }
            return be;
        }

        public BEUnidadMedida Eliminar(BEUnidadMedida pbe)
        {
            return _dl.Eliminar(pbe);
        }

    }
}
